package cn.actoncode.boot.framework.common.util;

import cn.actoncode.boot.framework.common.http.enums.PlatformType;
import cn.actoncode.boot.framework.common.json.ToJson;
import com.alibaba.fastjson2.JSON;
import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.StringUtils;

/**
 *  数据处理工具类
 *
 * @author bin
 */
public class DataUtils {
    /**
     * 将数据中包含的secret字符使用星号替换，防止日志打印时被输出
     */
    public static <E> String handleDataWithSecret(E data, PlatformType type) {
        String dataForLog = "";

        String str;

        switch (type) {
            case KUAISHOU -> str = "&app_secret=";
            case BAIDU -> str = "&client_secret=";
            default -> str = "&secret=";
        }

        if (data instanceof String && StringUtils.contains((String) data, str)) {
            dataForLog = RegExUtils.replaceAll((String) data, str + "\\w+&", str + "******&");
        } else if (data instanceof String dataStr) {
            int index = dataStr.indexOf("image_data");
            if (index > 0) {
                dataForLog = dataStr.substring(0, index - 2) + "}";
            }
        } else if (data instanceof ToJson) {
            // 这里因为请求使用了jackson，为了实现过滤大数据字段，所以日志使用fastjson
            dataForLog = JSON.toJSONString(data);
        } else {
            dataForLog = data.toString();
        }
        return dataForLog;
    }
}
